package com.chapter4.duotai.demo3;

/**
 * 父类引用指向子类对象 是向上转型：向上转型会让子类对象“缩小”，只能调用父类中的方法，对于子类中新增的方法就无法调用了。
 * 如果通过子类调用方法，则可以调用继承父类的方法以及子类中新增的方法
 *
 * 向下转型：将父类转成子类
 */
public class DownCasting {
    public static void main(String[] args) {
        Father f1= new Father();
        f1.a();

        //f1是Father对象找不到子类Child的c方法
        //f1.c();

        //编译错误，Exception in thread "main" java.lang.ClassCastException f1是Father对象不可以转成Child
        //((Child)f1).c();


        //向上转型
        Father f2= new Child();
        //调用子类重写的b方法
        f2.b();

        //f2是Child对象可以向下转型（将父类转成子类）
        ((Child)f2).c();


        //避免报错，确保对象是要被转的对象类型，在转换类型前判断是否是要被转换的对象类型
        if(f1 instanceof Child){
            ((Child)f1).c();
        }
        if(f2 instanceof Child){
            ((Child)f2).c();
        }

    }
}
